﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace BUS
{
    public class CBienDich
    {
        public ArrayList BienDich(string Text)
        {
            ArrayList _a = new ArrayList();
            ArrayList _ChuoiXuat = new ArrayList();
            ArrayList _b = new ArrayList();
            Text = Text.Replace('>', '<'); //thay kí tự > thành <
            string[] _ChuoiNhap = Text.Split('<');
            for (int i = 0; i < _ChuoiNhap.Length; i++)
            {
                if (i % 2 != 0)// kiểm tra phần tử lẻ của mảng
                {                    
                    if (_ChuoiNhap[i][0] == '/')
                    {
                        if (_a.Count > 1 && _ChuoiNhap[i - 1].ToString() == "")
                        {
                            string _funckey = _a[0].ToString();
                            for (int j = 1; j < _a.Count; j++)
                            {
                                _funckey += " _ " + _a[j];// lấy từng phần tử của arraylist
                            }
                            _ChuoiXuat.Add(_funckey);
                        }
                        _a.Remove(_ChuoiNhap[i].Remove(0, 1));//remove kí tự / trong phần tử lẻ
                    }
                    else
                    {
                        _a.Add(_ChuoiNhap[i].ToString()); //nếu ko có dấu / thì add vào arraylist
                    }
                }
                else //xét phần tử chẳn
                {
                    string _funckey = "";
                    _ChuoiNhap[i] = _ChuoiNhap[i].Replace(')', '(');
                    string[] _subkey = _ChuoiNhap[i].Split('(');
                    for (int j = 0; j < _a.Count; j++)
                    {
                        _funckey += _a[j] + " + ";// lấy từng phần tử của arraylist
                    }
                    for (int j = 0; j < _subkey.Length; j++)
                    {
                        if (j % 2 != 0)
                            _ChuoiXuat.Add(_funckey + _subkey[j]); // phím đầu cộng cho phần tử lẻ
                        else
                        {
                            for (int k = 0; k < _subkey[j].Length; k++)
                            {
                                string _temp = null;
                                for (int u = 0; u < _funckey.Length-3; u++)
                                    _temp += '_';
                                _temp += " + ";
                                if (k == 0)
                                {
                                    if (_subkey[j][k] == ' ')
                                    {
                                        _ChuoiXuat.Add(_funckey + "Space"); //kiểm tra kí tự trắng thay bằng space
                                    }
                                    else
                                        _ChuoiXuat.Add(_funckey + _subkey[j][k]); // phím đầu + với từng kí tự trong mảng chẳng
                                }
                                else
                                {
                                    if (_subkey[j][k] == ' ')
                                    {
                                        _ChuoiXuat.Add(_temp + "Space"); //kiểm tra kí tự trắng thay bằng space
                                    }
                                    else
                                        _ChuoiXuat.Add(_temp + _subkey[j][k]); // phím đầu + với từng kí tự trong mảng chẳng
                                }
                            }
                        }
                    }
                }
            }
            return _ChuoiXuat;//Trả về chuỗi cần xuất ra
        }
    }
}
